package com.qianfeng.vhly.youshare.utils;

/**
 * Created with IntelliJ IDEA.
 * User: vhly[FR]
 * Date: 15/2/6
 * Email: vhly@163.com
 */

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

/**
 * 通用的图片下载异步任务，通过构造方法设置，需要接收图片的ImageView
 */
public class ImageLoader extends AsyncTask<String, Integer, byte[]> {
    /**
     * 设置成员变量用于引用外部的ImageView。
     */
    private ImageView myImageView;
    private String imgUrl;

    public ImageLoader(ImageView myImageView) {
        this.myImageView = myImageView;
    }

    @Override
    protected byte[] doInBackground(String... params) {
        byte[] ret = new byte[0];

        if (params != null && params.length > 0) {
            imgUrl = params[0];
            // TODO 下载 imgUrl的图片
            ret = HttpTool.get(imgUrl);
        }

        return ret;
    }

    @Override
    protected void onPostExecute(byte[] bytes) {
        if (bytes != null) {

            // TODO 更新文件缓存
            FileCache fileCache = FileCache.getInstance();
            fileCache.putContent(imgUrl, bytes);

            Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

            // TODO 更新内存缓存
            ImageCache imageCache = ImageCache.getInstance();
            // 向内存中设置图片缓存
            imageCache.putImage(imgUrl, bitmap);

            if(myImageView != null) {

                // TODO 检查ImageView的Tag
                Object tag = myImageView.getTag();

                if(tag != null){
                    // TODO 检查下载地址与Tag是否相等

                    if(tag instanceof String){
                        String sTag = (String) tag;

                        // 如果当前下载的地址，与 ImageView中的Tag是一致的，
                        // 那么就认为当前异步任务下载的图片就是需要在这个ImageView中显示
                        if(sTag.equals(imgUrl)){
                            myImageView.setImageBitmap(bitmap);
                        }

                    }

                }else{
                    myImageView.setImageBitmap(bitmap);
                }

            }
        }

    }
}
